--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / interfaces / InterfacesPage.vue
Displaying Raw • Download
meshchatx/src/frontend/components/interfaces/InterfacesPage.vue 0492e7d7bf956b0eacdb4fc40c6e87151db604e7 (0492e7d7) Text, 17.66 KB
Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-col flex-1 overflow-hidden min-w-0 bg-gradient-to-br from-slate-50 via-slate-100 to-white dark:from-zinc-950 dark:via-zinc-900 dark:to-zinc-900"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-3 md:p-6 space-y-4 max-w-6xl mx-auto w-full flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showRestartReminderTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"bg-gradient-to-r from-amber-500 to-orange-500 text-white rounded-3xl shadow-xl p-4 flex flex-wrap gap-3 items-center"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"alert" Te6edf3classTff7b72=Ta5d6ff"w-6 h-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-semibold"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.restart_required"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.restart_description"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isElectronTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"ml-auto inline-flex items-center gap-2 rounded-full border border-white/40 px-4 py-1.5 text-sm font-semibold text-white hover:bg-white/10 transition"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3relaunchTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"restart" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.restart_now"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-3 items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.manage"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xl font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.title"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-600 dark:text-gray-300"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.description"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72RouterLink Tb4b4b4:Te6edf3toTff7b72=Ta5d6ff"Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff'interfaces.add' Tb4b4b4}Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"primary-chip px-4 py-2 text-sm"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.add_interface"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72RouterLinkTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"secondary-chip text-sm" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showImportInterfacesModalTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"import" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.import"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"secondary-chip text-sm" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3exportInterfacesTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"export" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.export_all"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
T8b949e<!--
<button
type="button"
class="secondary-chip text-sm bg-amber-500/10 hover:bg-amber-500/20 text-amber-600 dark:text-amber-400 border-amber-500/30"
:disabled="reloadingRns"
@click="reloadRns"
>
<MaterialDesignIcon
:icon-name="reloadingRns ? 'refresh' : 'restart'"
class="w-4 h-4"
:class="{ 'animate-spin-reverse': reloadingRns }"
/>
{{ reloadingRns ? $t("app.reloading_rns") : $t("app.reload_rns") }}
</button>
-->Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-3 items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3searchTermTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'interfaces.search_placeholder'Tb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2 flex-wrap"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3filterChipClassTb4b4b4(Te6edf3statusFilter Tff7b72=== Ta5d6ff'all'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3setStatusFilterTb4b4b4(Ta5d6ff'all'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.all"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3filterChipClassTb4b4b4(Te6edf3statusFilter Tff7b72=== Ta5d6ff'enabled'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3setStatusFilterTb4b4b4(Ta5d6ff'enabled'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.enabled"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3filterChipClassTb4b4b4(Te6edf3statusFilter Tff7b72=== Ta5d6ff'disabled'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3setStatusFilterTb4b4b4(Ta5d6ff'disabled'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.disabled"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full sm:w-60"Tb4b4b4>
Tb4b4b4<Tff7b72select Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3typeFilterTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"input-field"Tb4b4b4>
Tb4b4b4<Tff7b72option Te6edf3valueTff7b72=Ta5d6ff"all"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.all_types"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72option Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3type Tff7b72in Te6edf3sortedInterfaceTypesTa5d6ff" Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3typeTa5d6ff" Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3typeTa5d6ff"Tb4b4b4>
Tff7b72{{ Te6edf3type Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3filteredInterfacesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"glass-card text-center py-10 text-gray-500 dark:text-gray-300"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"lan-disconnect" Te6edf3classTff7b72=Ta5d6ff"w-10 h-10 mx-auto mb-3" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-semibold"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.no_interfaces_found"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.no_interfaces_description"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"grid gap-4 xl:grid-cols-2"Tb4b4b4>
Tb4b4b4<Tff7b72Interface
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3iface Tff7b72of Te6edf3filteredInterfacesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3_nameTa5d6ff"
Tb4b4b4:Te6edf3ifaceTff7b72=Ta5d6ff"Te6edf3ifaceTa5d6ff"
Tb4b4b4:Te6edf3is-reticulum-runningTff7b72=Ta5d6ff"Te6edf3isReticulumRunningTa5d6ff"
Tb4b4b4@Te6edf3enableTff7b72=Ta5d6ff"Te6edf3enableInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3disableTff7b72=Ta5d6ff"Te6edf3disableInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3editTff7b72=Ta5d6ff"Te6edf3editInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3exportTff7b72=Ta5d6ff"Te6edf3exportInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3deleteTff7b72=Ta5d6ff"Te6edf3deleteInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72ImportInterfacesModal Te6edf3refTff7b72=Ta5d6ff"import-interfaces-modal" Tb4b4b4@Te6edf3dismissedTff7b72=Ta5d6ff"Te6edf3onImportInterfacesModalDismissedTa5d6ff" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3DialogUtils Tff7b72from Ta5d6ff"../../js/DialogUtils"Tb4b4b4;
Tff7b72import Te6edf3ElectronUtils Tff7b72from Ta5d6ff"../../js/ElectronUtils"Tb4b4b4;
Tff7b72import Te6edf3Interface Tff7b72from Ta5d6ff"./Interface.vue"Tb4b4b4;
Tff7b72import Te6edf3Utils Tff7b72from Ta5d6ff"../../js/Utils"Tb4b4b4;
Tff7b72import Te6edf3ImportInterfacesModal Tff7b72from Ta5d6ff"./ImportInterfacesModal.vue"Tb4b4b4;
Tff7b72import Te6edf3DownloadUtils Tff7b72from Ta5d6ff"../../js/DownloadUtils"Tb4b4b4;
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../../js/ToastUtils"Tb4b4b4;
Tff7b72import Te6edf3GlobalState Tff7b72from Ta5d6ff"../../js/GlobalState"Tb4b4b4;
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"InterfacesPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3ImportInterfacesModalTb4b4b4,
Te6edf3InterfaceTb4b4b4,
Te6edf3MaterialDesignIconTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3interfacesTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3interfaceStatsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3reloadIntervalTff7b72: Tff7b72nullTb4b4b4,
Te6edf3searchTermTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3statusFilterTff7b72: Ta5d6ff"all"Tb4b4b4,
Te6edf3typeFilterTff7b72: Ta5d6ff"all"Tb4b4b4,
Te6edf3reloadingRnsTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isReticulumRunningTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3hasPendingInterfaceChangesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChangesTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3modifiedInterfaceNamesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isElectronTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3ElectronUtilsTb4b4b4.Te6edf3isElectronTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3showRestartReminderTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3hasPendingInterfaceChangesTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3interfacesWithStatsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3results Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Tb4b4b4[Te6edf3interfaceNameTb4b4b4, Te6edf3ifaceTb4b4b4] Tff7b72of Tffa657ObjectTb4b4b4.Te6edf3entriesTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3interfacesTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ifaceTb4b4b4.Te6edf3_name Tff7b72= Te6edf3interfaceNameTb4b4b4;
Te6edf3ifaceTb4b4b4.Te6edf3_stats Tff7b72= Tff7b72thisTb4b4b4.Te6edf3interfaceStatsTb4b4b4[Te6edf3interfaceNameTb4b4b4]Tb4b4b4;
Te6edf3ifaceTb4b4b4.Te6edf3_restart_required Tff7b72= Tff7b72thisTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Te6edf3resultsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3resultsTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3enabledInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3interfacesWithStatsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3disabledInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3interfacesWithStatsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3filteredInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3search Tff7b72= Tff7b72thisTb4b4b4.Te6edf3searchTermTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3interfacesWithStats
Tb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusFilter Tff7b72=== Ta5d6ff"enabled" Tff7b72&& Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusFilter Tff7b72=== Ta5d6ff"disabled" Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3typeFilter Tff7b72!== Ta5d6ff"all" Tff7b72&& Te6edf3ifaceTb4b4b4.Te6edf3type Tff7b72!== Tff7b72thisTb4b4b4.Te6edf3typeFilterTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3searchTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3haystack Tff7b72= Tb4b4b4[
Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3typeTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3target_hostTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3target_portTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3listen_ipTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3listen_portTb4b4b4,
Tb4b4b4]
Tb4b4b4.Te6edf3filterTb4b4b4(Tffa657BooleanTb4b4b4)
Tb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff" "Tb4b4b4)
Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3haystackTb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)
Tb4b4b4.Te6edf3sortTb4b4b4(Tb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3enabledDiff Tff7b72= Tffa657NumberTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3bTb4b4b4)Tb4b4b4) Tff7b72- Tffa657NumberTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3aTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3enabledDiff Tff7b72!== T79c0ff0Tb4b4b4) Tff7b72return Te6edf3enabledDiffTb4b4b4;
Tff7b72return Te6edf3aTb4b4b4.Te6edf3_nameTb4b4b4.Te6edf3localeCompareTb4b4b4(Te6edf3bTb4b4b4.Te6edf3_nameTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3sortedInterfaceTypesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3types Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3interfacesWithStatsTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Te6edf3typesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3typeTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657ArrayTb4b4b4.Tff7b72fromTb4b4b4(Te6edf3typesTb4b4b4)Tb4b4b4.Te6edf3sortTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3beforeUnmountTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3reloadIntervalTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3updateInterfaceStatsTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// update info every few seconds
Tff7b72thisTb4b4b4.Te6edf3reloadInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3updateInterfaceStatsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff1000Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Te6edf3relaunchTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3ElectronUtilsTb4b4b4.Te6edf3relaunchTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3trackInterfaceChangeTb4b4b4(Te6edf3interfaceName Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChanges Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3isInterfaceEnabledTff7b72: Tff7b72function Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/interfacesTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3interfaces Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3interfacesTb4b4b4;
T8b949e// also check app info for running state
Tff7b72const Te6edf3appInfoResponse Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/app/infoTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isReticulumRunning Tff7b72= Te6edf3appInfoResponseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3app_infoTb4b4b4.Te6edf3is_reticulum_runningTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// do nothing if failed to load interfaces
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3updateInterfaceStatsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
T8b949e// fetch interface stats
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/interface-statsTa5d6ff`Tb4b4b4)Tb4b4b4;
T8b949e// update data
Tff7b72const Te6edf3interfaces Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3interface_statsTff7b72?Tb4b4b4.Te6edf3interfaces Tff7b72?? Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3iface Tff7b72of Te6edf3interfacesTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3interfaceStatsTb4b4b4[Te6edf3ifaceTb4b4b4.Te6edf3short_nameTb4b4b4] Tff7b72= Te6edf3ifaceTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// do nothing if failed to load interfaces
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3enableInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
T8b949e// enable interface
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/interfaces/enableTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3interfaceNameTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3trackInterfaceChangeTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Ta5d6ff"failed to enable interface"Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// reload interfaces
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3disableInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
T8b949e// disable interface
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/interfaces/disableTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3interfaceNameTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3trackInterfaceChangeTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Ta5d6ff"failed to disable interface"Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// reload interfaces
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3editInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"interfaces.edit"Tb4b4b4,
Te6edf3queryTff7b72: Tb4b4b4{
Te6edf3interface_nameTff7b72: Te6edf3interfaceNameTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
T8b949e// ask user to confirm deleting conversation history
Tff7b72if Tb4b4b4(
Tff7b72!Tb4b4b4(Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(Ta5d6ff"Are you sure you want to delete this interface? This can not be undone!"Tb4b4b4)Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// delete interface
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/interfaces/deleteTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3interfaceNameTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3trackInterfaceChangeTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Ta5d6ff"failed to delete interface"Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// reload interfaces
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3exportInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
T8b949e// fetch exported interfaces
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/interfaces/export"Tb4b4b4)Tb4b4b4;
T8b949e// download file to browser
Te6edf3DownloadUtilsTb4b4b4.Te6edf3downloadFileTb4b4b4(Ta5d6ff"meshchat_interfaces.txt"Tb4b4b4, Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Ta5d6ff"Failed to export interfaces"Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3exportInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
T8b949e// fetch exported interfaces
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/interfaces/export"Tb4b4b4, Tb4b4b4{
Te6edf3selected_interface_namesTff7b72: Tb4b4b4[Te6edf3interfaceNameTb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
T8b949e// download file to browser
Te6edf3DownloadUtilsTb4b4b4.Te6edf3downloadFileTb4b4b4(Ta5d6ff`Tffd700${Te6edf3interfaceNameTffd700}Ta5d6ff.txtTa5d6ff`Tb4b4b4, Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Ta5d6ff"Failed to export interface"Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3showImportInterfacesModalTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$refsTb4b4b4[Ta5d6ff"import-interfaces-modal"Tb4b4b4]Tb4b4b4.Te6edf3showTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onImportInterfacesModalDismissedTb4b4b4(Te6edf3imported Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
T8b949e// reload interfaces as something may have been imported
Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3importedTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3trackInterfaceChangeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3setStatusFilterTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3statusFilter Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3filterChipClassTb4b4b4(Te6edf3isActiveTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3isActive Tff7b72? Ta5d6ff"primary-chip text-xs" Tff7b72: Ta5d6ff"secondary-chip text-xs"Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3reloadRnsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3reloadingRnsTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3reloadingRns Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/reload"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3messageTb4b4b4)Tb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChanges Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3error Tff7b72|| Ta5d6ff"Failed to reload Reticulum!"Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3reloadingRns Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────